import { fetchEventSource } from '@microsoft/fetch-event-source'
import hljs from 'highlight.js';
import Vue from 'vue'
// 发送消息
export const postMsg = ({ state, commit }, data) =>{
  commit('pushAiDialogItem', {
    message_type: '2',
    message: {
      content: data.content
    }
  })
  commit('pushAiDialogItem', {
    message_type: '1',
    message: {
      content: '...'
    }
  })
  let streamAnswer = ''
  let params = {
    conversation_id: "e055bfc0-cd7f-4f6f-9f90-b24e3f8721f0",
    files: [],
    inputs: {},
    parent_message_id:state.parentMessageId,
    query: data.content,
    response_mode: "streaming"
  }
  state.abortCtrl = new AbortController()
  // let strList = [
  //   '**回答：**',
  //   '\n\n有乳腺',
  //   '结节和',
  //   '甲状腺结节对',
  //   '投保的影响',
  //   '主要体现在',
  //   '以下几',
  //   '个方面，具体',
  //   '如下：',
  //   '\n\n---\n\n### 一、核心实体识别\n- **乳腺',
  //   '结节**\n- **甲状腺结节**\n- **投保影响**\n\n---\n\n### 二、问题类型',
  //   '\n- **概念解释 + 技术参数查询**\n\n---\n\n### 三、投保影响分析（按险种分类）\n\n#### 1. **寿险**\n| 乳',
  //   '腺结节分级（BI-RADS） | 核保结论 |\n|--------------------------|-----------|\n| 0级                      | 延期至明',
  //   '确诊断 |\n| 1级、2级、3级、4a级      | 一般标准体承保 |\n| 4b级及以上               | 一般延期 |\n\n| 甲状腺结节分级（TI-RADS） | 核保结论 |\n|---------------------------|-----------|\n| 1级、2级、3级、4a级       | 一般标准体承保 |\n| 4b级及以上                | 一般延期 |\n\n#### 2. **重疾险**\n| 乳腺结节分级（BI-RADS） | 核保结论 |\n|--------------------------|-----------|\n| 0级                      | 延期至明确诊断 |\n| 1级、2级                 | 一般标准体承保 |\n| 3级、4a级                | 一般除外责任 |\n| 4b级及以上               | 一般延期 |\n\n| 甲状腺结节分级（TI-RADS） | 核保结论 |\n|---------------------------|-----------|\n| 1级、2级                  | 一般标准体承保 |\n| 3级、4a级                 | 一般除外责任 |\n| 4b级及以上                | 一般延期 |\n\n#### 3. **医疗险**\n| 乳腺结节分级（BI-RADS） | 核保结论 |\n|--------------------------|-----------|\n| 0级                      | 延期至明确诊断 |\n| 1级、2级                 | 一般标准体承保 |\n| 3级、4a级                | 一般除外责任 |\n| 4b级及以上               | 一般延期 |\n\n| 甲状腺结节分级（TI-RADS） | 核保结论 |\n|---------------------------|-----------|\n| 1级、2级                  | 一般标准体承保 |\n| 3级、4a级                 | 一般除外责任 |\n| 4b级及以上                | 一般延期 |\n\n---\n\n### 四、投保需告知的信息\n| 疾病类型       | 投保时需告知信息 |\n|----------------|------------------|\n| 乳腺结节       | 首次发现时间、是否持续复查、是否活检或手术切除、病理结果 |\n| 甲状腺结节     | 发现时间、进展情况、治疗情况、是否有并发症 |\n\n---\n\n### 五、投保需提供的资料\n| 疾病类型       | 投保时需提供资料 |\n|----------------|------------------|\n| 乳腺结节       | 完整病历、持续乳腺超声、腋窝淋巴结超声、病理检查报告 |\n| 甲状腺结节     | 完整病历、体检报告、甲状腺B超、甲状腺功能、术后病理结果、术后复查资料、《甲状腺疾病》问卷 |\n\n---\n\n### 六、建议\n1. **分级评估**：确保您已经通过超声检查（乳腺BI-RADS、甲状腺TI-RADS）明确结节分级。\n2. **资料准备**：提前准备好相关病历和检查资料，有助于加快核保流程。\n3. **咨询专业人士**：核保结论具有最终决定权，建议在投保前与保险公司核保部门或代理人沟通确认。\n\n---\n\n**来源定位：**\n- 片段1：中信保城核保知识库（乳腺结节章节）\n- 片段2：中信保城核保知识库（甲状腺结节章节）\n\n**免责声明：**\n本回答基于中信保城核保知识库公开资料，仅供参考。'
  // ]
  // for(let i=0; i < strList.length; i++) {
  //   streamAnswer += [strList[i]]
  //   let reg =new RegExp("<pre","g")//这里是处理使用prism插件后显示行号
  //   let str = marked.parse(streamAnswer).replace(reg,`<pre class='line-numbers'`)
  //   setTimeout(() => {
  //     hljs.highlightAll()
  //   }, 100)
  //   commit('updateAiDialogItem', {
  //     message_type: '1',
  //     message: {
  //       content: str
  //     }
  //   })
  //   Vue.nextTick(() => {
  //     commit('setScrollDialogMessage', true)
  //   })
  // }
  // return
  // 处理event-stream
  fetchEventSource('/console/api/installed-apps/1883b13d-b9e9-456c-ba4b-d7d1eedde3ce/chat-messages', {
    method: 'POST',
    headers: {
      "Content-Type": 'application/json',
      "authorization": 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiODg4ZTk1MzUtN2FkZS00MDkzLWIyNDgtZjIxZTk4MTE4NjRiIiwiZXhwIjoxNzUwOTk0NjEwLCJpc3MiOiJTRUxGX0hPU1RFRCIsInN1YiI6IkNvbnNvbGUgQVBJIFBhc3Nwb3J0In0.DZCSEcAb5rD5q82J48W7seHTtgtbfnM6ZCcS8jCFWKs'
    },
    signal: state.abortCtrl.signal,
    body: JSON.stringify(params),
    onopen() {
      console.log("onopen：准备就绪，可以开始接收服务器数据：")
    },
    onmessage(event) {
      console.log(event.data);
      commit('setStreamOutputStatus', true)
      let data = event.data ? JSON.parse(event.data) : {}
      let contentFragment = data.answer || ''
      if(data.answer) {
        commit('setParentMessageId', data.message_id)
      }
      streamAnswer += contentFragment
      let reg =new RegExp("<pre","g")//这里是处理使用prism插件后显示行号
      let str = marked.parse(streamAnswer).replace(reg,`<pre class='line-numbers'`)
      setTimeout(() => {
        hljs.highlightAll()
      }, 100)
      commit('updateAiDialogItem', {
        message_type: '1',
        message: {
          content: str
        }
      })
      Vue.nextTick(() => {
        commit('setScrollDialogMessage', true)
      })
    },
    onclose() {
      console.log("close：关闭")
      commit('setStreamOutputStatus', false)
    },
    onerror() {
    }
  })
}
// 停止输出
export const stopStream = ({state, commit}) => {
  state.abortCtrl.abort()
  commit('setStreamOutputStatus', false)
}